python quuine
2. 自己仿写
s = ''' a , b = 1 , 2 print "s = " + chr(39)*3 + s + chr(39)*3 + chr(10) + s ''' a , b = 1 , 2 print "s = " + chr(39)*3 + s + chr(39)*3 + chr(10) + s
1. Quine程序
所谓Quine程序,就是能把自己源代码打印出来的程序。听上去好像简单,仔细想想还是挺麻烦的,因为按照最直接的print/printf方法,那是无论如何也把自己无法打印出来的。当然,前提是不能作弊,例如打开源文件直接读取并打印出来,或者使用一些程序特殊的机制打印自己的片段,或者干脆就是一个空文件。
这几天学习计算理论里面的递归理论,才知道了原理,很惭愧以前一直没想到呢。其实就是首先使用一个变量保存这个变量以后的程序,然后再在这个变量以后的程序打印出变量的赋值语句与之前的语句,然后打印出这个变量的值(也就是这个变量之后的语句)。所以直接的print/printf肯定是不行的。下面是一个python的例子:
#s = 'print "s = " + chr(39) + s + chr(39) + chr(10) + s' #print "s = " + chr(39) + s + chr(39) + chr(10) + s
第一句就是一个赋值语句,将这个赋值语句后面的语句直接复制到常量字符串中,然后第二句就是打印了,打印出前面的语句,不过可以用s代表自己的值,这样就避免了无限递归了。递归定理,其实就是这样简单。